As the central processing units used by many computing devices achieve speeds approaching the practical maximum speed of processing technology, computing devices are increasingly being manufactured with multiple processing units to provide future speed increases. However, many systems have yet to be redesigned to take advantage of the multiple processing units and perform tasks in parallel, or divide tasks equally among the processing units. By redesigning individual systems, either in hardware or software, to accommodate multi-processor computing devices, further increases in speed, proportional to the increases experienced to date, can be achieved.
Due to the tremendous growth of the number of networked computing devices, connected to the both Internet and World Wide Web, and to smaller, more private networks, such as corporate or government Intranets, the ability of computing devices to efficiently handle network communications has become of paramount importance. Consequently, the efficient use of multiple processing units by network subsystems can provide a mechanism by which a computing device's ability to handle network communications can be easily and inexpensively enhanced. Lying at the core of the explosion of the popularity and usage of networks are simplified communication protocols such as the hypertext transfer protocol (HTTP) commonly used by the World Wide Web, and many Intranets. Such network protocols can often be layered on top of “lower level” protocols, that provide different features. Among the most common of these lower level protocols are the Transmission Control Protocol (TCP) and the Internet Protocol (IP).
The Internet Protocol provides the ability to break a message down into packets for transmission across packet-switching networks. Each packet can specify a destination, thereby allowing a single physical connection to be used for many different simultaneous communications. Each communication can be nothing more than a series of packets, and each packet, having a specified destination, can be sent independently of any other packet. In such a manner, a single physical connection can transmit an assortment of packets, each destined to a particular location, and thereby simultaneously support multiple communications.
The Transmission Control Protocol provides the ability of two hosts to establish a connection and exchange information. TCP can provide the necessary guidelines for ensuring that individual packets are properly delivered to the corrected destination, and that they are delivered in the proper order. By providing such delivery services, TCP and IP, collectively “TCP/IP”, can provide a network communication foundation which can be used by other software and hardware, without the need to re-implement packetization, delivery, and routing functionality
Each of these networking protocols require some amount of processing by the computing device, and specifically the processing units of the computing device, to perform their tasks. For example, upon establishment of a TCP/IP connection, the processing units of a communicating computing device can create a data structure known as a Transmission Control Block (TCB) that contains all of the connection information for the TCP/IP connection. A TCB can contain socket information that can uniquely identify the connection, such as the sockets at the two ends of computing devices communicating with one another, and a local connection name by which the user can reference the connection. Additional information stored in the TCB can be the security and precedence of the connection, pointers to the user's send and receive buffers, pointers to the retransmit queue and to the current segment and send and receive sequence variables. As a result of storing this and other data, the size of a typical TCB is on the order of 400 to 500 bytes of non-paged-pool memory.
The TCBs can be stored in a table, such as a hash table, that can be searched by the processing units, upon receipt of each packet, for the proper TCB. Because a TCP connection can progress through a series of states during its lifetime, such as LISTEN, SYN-SENT, SYN-RECEIVED, ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, LAST-ACK, TIME-WAIT, additional tables can be created by the processing units to increase the efficiency of the overall system. For example, a TimeWait TCB table can be created, having TimeWait TCBs that occupy less memory space than a complete TCB, but can still provide the necessary information required during the TIME-WAIT state. Similarly, a SYN TCB table can be created, having SYN TCBs that occupy less memory space than a complete TCB, but can still provide the necessary information required during the SYN-SENT and SYN-RECEIVED states.
In addition to creating, maintaining and searching network communication variables, such as TCB tables, the processing units of the computing device can also be requested by the networking protocols to implement mechanisms such as timer wheels and delta queues to aid in network communication. Networking protocols implement a number of scheduled events that can require timers for proper operation. For example, TCP supports timers that can indicate the appropriate time for events such as retransmission, Delay-acknowledgement, Push, Silly-Window-Syndrome prevention, Finish-Wait-2-State, connection establishment and disconnection. Such timers can be maintained in a TCB, and a timer wheel can reduce the number of timers maintained in the TCB by implementing a circular timer buffer with a number of divisions, each corresponding to a fixed unit of time. A pointer to a TCB having an event that is to occur at a particular time can be entered into a corresponding division, allowing a single timer wheel to maintain many of the scheduled events of multiple TCBs. Similarly, a delta queue can maintain the scheduled events of a TCB, or multiple TCBs, by storing each scheduled event as a function of the time difference between it and the next most recent event. In such a manner, the only difference that needs to be continually updated though time is the difference between the current time and the most recently scheduled event in the delta queue.
In current computing devices having multiple processing units, the number of processing units is determined upon starting the computing device, and the networking protocols' requests are divided among those processing units. Therefore, for example, the various TCB tables, timer wheels, and delta queues required by TCP and IP can be created and allocated to each processing unit present when the computing device was started. However, if an additional processing unit is subsequently added to the computing device, in order for the networking protocols to take advantage of the additional processing unit, each of the TCB tables, timer wheels, and delta queues can be rehashed and otherwise redistributed among the all of the processing units currently available. Such a process can require so much time to complete that open connections may become disconnected. Because most multi-processor server computing devices are loath to disconnect client computing devices, either the networking protocols do not take advantage of the additional processing power and speed provided by the added processing unit, or the administrator of the computing device does not provide additional processing units while the server computing device is actively communicating with client computer devices.